assume cs:codesg

; 计算(1234H+4567H)*2H
codesg segment
	       mov ax,1234H
	       mov bx,4567H
	       add ax,bx
	       add ax,ax

	       mov ax,4c00H
	       int 21H
codesg ends

; loop循环 计算2^12次方
codeloop segment
	         mov  ax,2
	         mov  cx,11
	s:       add  ax,ax
	         loop s

	         mov  ax,4C00H
	         int  21H
codeloop ends

; 计算ffff:0~ffff:b单元中的数据和，结果放到dx中
codeSum segment
	; 设置ds指向ffff
	        mov  ax,0ffffh
	        mov  ds,ax
	; dx置0
	        mov  dx,0
	; bx索引只递增
	        mov  bx,0
	        mov  cx,0BH
	sum:    mov  al,ds:[bx]
	        mov  ah,0
	        add  dx,ax
	        inc  bx
	        loop sum
	        mov  ax,4C00H
	        int  21H
codeSum ends

; 将内存ffff:0~ffff:b的数据复制到0:200~0:20b
codecopy segment
	         mov  ax,0ffffh
	         mov  ds,ax
	         mov  ax,0020h
	         mov  es,ax
	; 初始化 索引开始位置 循环次数
	         mov  bx,0
	         mov  cx,0BH
	; 开始循环复制
	cp:      mov  dl,ds:[bx]
	         mov  es:[bx],dl
	         inc  bx
	         loop cp
	; 退出
	         mov  ax,4C00H
	         int  21H
codecopy ends

; 实验4 [bx]和loop的使用 
; 向内存0:200~0:23F依次传递数据0~63(3FH)
code4_1 segment
	        mov  ax,0020H
	        mov  ds,ax
    
	        mov  bx,0H
	        mov  al,0H
	        mov  cx,40H

	cp:     mov  dl,al
	        mov  ds:[bx],al
	        inc  al
	        inc  bx
	        loop cp
    
	        mov  ax,4C00H
	        int  21h
code4_1 ends

; 只能使用9条指令，其中包括mov ax,4C00h int 21h
code4_2 segment
	        mov  ax,0020H
	        mov  ds,ax
    
	        mov  bl,0H
	        mov  cx,40H

	cp:     mov  ds:[bl],bl
	        inc  bl
	        loop cp
    
	        mov  ax,4C00H
	        int  21h
code4_1 ends

; 将"mov ax,4c00h之前的指令复制到内存0:200处
code4_3 segment
	        mov  ax,cs:[ip]	;//
	        mov  ds,ax
	        mov  ax,0020h
	        mov  es,ax
	        mov  bx,0
	        mov  cx,17h    	;//通过实验获得，对exe通过debug加载后通过u命令查看得到
	s:      mov  al,[bx]
	        mov  es:[bx],al
	        inc  bx
	        loop s
	        mov  ax,4c00h
	        int  21h
code4_3 ends

end
